package Visitor;

import Arbori.Nod;
import Functii.Arccos;
import Functii.Arcctg;
import Functii.Arcsin;
import Functii.Arctg;
import Functii.Constanta;
import Functii.Cos;
import Functii.Cosh;
import Functii.Cotangenta;
import Functii.Exponentiala;
import Functii.Functie;
import Functii.Logaritm;
import Functii.Necunoscuta;
import Functii.Putere;
import Functii.Radical;
import Functii.Sin;
import Functii.Sinh;
import Functii.Tangenta;
import Operatori.Cat;
import Operatori.Minus;
import Operatori.Operator;
import Operatori.Plus;
import Operatori.Produs;

public class ToStringVisitor extends Visitor{

	String s;
	
	public ToStringVisitor() {
		this.s="";
	}
	public ToStringVisitor(String s) {
		this.s = s;
	}

	public String getS() {
		return s;
	}

	public void setS(String s) {
		this.s = s;
	}
	
	public void visit(Plus p) {
		visit(p);
	}

	public void visit(Minus m) {
		visit(m);
	}

	public void visit(Produs p) {
		visit(p);
	}

	public void visit(Cat c) {
		visit(c);
	}
//	public void visit(Plus p) {
//        if(p.getFStang() != null && p.getFDrept() != null){
//                visit(p.getFStang());
//                String s1 = this.s;
//                visit(p.getFDrept());
//                String s2 = this.s;
//                s = p.concatTermeni(s1, s2);
//        }
//	}
//	public void visit(Minus m) {
//        if(m.getFStang() != null && m.getFDrept() != null){
//                visit(m.getFStang());
//                String s1 = this.s;
//                visit(m.getFDrept());
//                String s2 = this.s;
//                s = m.concatTermeni(s1, s2);
//        }
//	}
//	public void visit(Produs p) {
//        if(p.getFStang() != null && p.getFDrept() != null){
//                visit(p.getFStang());
//                String s1 = this.s;
//                visit(p.getFDrept());
//                String s2 = this.s;
//                s = p.concatTermeni(s1, s2);
//        }
//	}
//	public void visit(Cat p) {
//        if(p.getFStang() != null && p.getFDrept() != null){
//                visit(p.getFStang());
//                String s1 = this.s;
//                visit(p.getFDrept());
//                String s2 = this.s;
//                s = p.concatTermeni(s1, s2);
//        }
//	}
//	public void visit(Operator o){
//        if(o.getFStang() != null && o.getFDrept() != null){
//                visit(o.getFStang());
//                String s1 = this.s;
//                visit(o.getFDrept());
//                String s2 = this.s;
//                s = o.concatTermeni(s1, s2);
//        }
//}
//
//	public void visit(Functie f) {
//        if(f.getFStang() != null && f.getFDrept() != null){
//                visit(f.getFStang());
//                String s1 = this.s;
//                s = f.concatTermeni(s1);
//        }
//	} 
	
	public void visit(Operator o){
		if(o.getFStang() != null && o.getFDrept() != null){
			visit(o.getFStang());
			String s1 = this.s;
			visit(o.getFDrept());
			String s2 = this.s;
			s = o.concatTermeni(s1, s2);
		}
	}

	public void visit(Functie f) {
		if(f.getFStang() != null){
			visit(f.getFStang());
			String s1 = this.s;
			s = f.concatTermeni(s1);
		}
	}
	
	public void visit(Sin s) {
        visit(s);
	}

	public void visit(Cos c) {
	        visit(c);
	}
	
	public void visit(Tangenta t) {
	        visit(t);
	}
	
	public void visit(Cotangenta c) {
	        visit(c);
	}
	
	public void visit(Arcsin as) {
	        visit(as);
	}
	
	public void visit(Arccos ac) {
	        visit(ac);
	}
	
	public void visit(Arctg at) {
	        visit(at);
	}
	
	public void visit(Arcctg ac) {
	        visit(ac);
	}
	
	public void visit(Sinh sh) {
	        visit(sh);
	}
	
	public void visit(Cosh ch) {
	        visit(ch);
	}
	
	public void visit(Constanta c) {
	        this.s = Double.toString(c.getCt());
	}
	
	public void visit(Necunoscuta n) {
	        this.s = "x";
	}
	
	public void visit(Radical r) {
	        visit(r);
	}
	
	public void visit(Putere p) {
	        visit(p);
	}
	
	public void visit(Exponentiala e) {
	        visit(e);
	}
	
	public void visit(Logaritm l) {
	        visit(l);
	}
	
	public void visit(Nod n) {
	        
	}
	
	
	
	
	
}
